this._trackArtists = [];
this._trackTitle = '';
this._trackCoverUrl = '';
+ this._busName = busName;
}
get status() {
for (let prop in this._playerProxy.Metadata)
metadata[prop] = this._playerProxy.Metadata[prop].deep_unpack();
- this._trackArtists = metadata['xesam:artist'] || [_("Unknown artist")];
- this._trackTitle = metadata['xesam:title'] || _("Unknown title");
- this._trackCoverUrl = metadata['mpris:artUrl'] || '';
+ // Validate according to the spec; some clients send buggy metadata:
+ // https://www.freedesktop.org/wiki/Specifications/mpris-spec/metadata
+ this._trackArtists = metadata['xesam:artist'];
+ if (!Array.isArray(this._trackArtists) ||
+ !this._trackArtists.every(artist => typeof artist === 'string')) {
+ if (typeof this._trackArtists !== 'undefined')
+ log(`Received faulty track artist metadata from ${
+ this._busName}; expected an array of strings, got ${
+ this._trackArtists} (${typeof this._trackArtists})`);
+ this._trackArtists = [_("Unknown artist")];
+ }
+
+ this._trackTitle = metadata['xesam:title'];
+ if (typeof this._trackTitle !== 'string') {
+ if (typeof this._trackTitle !== 'undefined')
+ log(`Received faulty track title metadata from ${
+ this._busName}; expected a string, got ${
+ this._trackTitle} (${typeof this._trackTitle})`);
+ this._trackTitle = _("Unknown title");
+ }
+
+ this._trackCoverUrl = metadata['mpris:artUrl'];
+ if (typeof this._trackCoverUrl !== 'string') {
+ if (typeof this._trackCoverUrl !== 'undefined')
+ log(`Received faulty track cover art metadata from ${
+ this._busName}; expected a string, got ${
+ this._trackCoverUrl} (${typeof this._trackCoverUrl})`);
+ this._trackCoverUrl = '';
+ }
+
this.emit('changed');
let visible = this._playerProxy.CanPlay;